Міністерство освіти і науки, молоді та спорту
Національний університет “Львівська політехніка”
Кафеда СКС
Курсоий проект
з курсу “Системне програмне забезпечення”
Анотація
В даному курсовому проекті розроблено компілятор з СІ-подібної вхідної мови програмування . Компілятор розроблений в середовищі програмування Microsoft Visual C++ на мові ANSI С, та поданий у пояснювальній записці, а також в електронному варіанті. В пояснювальній записці подано огляд існуючих методів розробки компіляторів, детальний опис мови, а також описано процес розробки програми компілятора на рівні блок-схем і тексту програми. До проекту додано результати тестування програми.
Зміст
Анотація 2
Зміст 3
Завдання 4
Формальний опис вхідної мови програмування 6
Деталізований опис вхідної мови 6
Перелік термінальних символів та ключових слів 6
Формальний опис вхідної мови в термінах BNF 6
Правила написання правил у розширеній нотації Бекуса-Наура: 6
Формальний опис заданої вхідної мови в термінах BNF 8
Повне дерево граматичного розбору 9
Розробка компілятора вхідної мови програмування 11
Лексичний аналiз 13
Синтаксичний аналiз 14
Генерація коду 15
Відладка та тестування компілятора 16
Робоча програма test1.txt 16
Текст програми 16
Результат лексичного аналізу 16
Результат синтаксичного аналізу 17
Результат генерації коду 17
Програма з помилкою test2.txt 18
Текст програми 18
Результат лексичного аналізу 18
Результат синтаксичного аналізу 19
Висновки 20
Література 21
Додатки 22
Текст програми 22
Завдання
Розробити компілятор заданої вхідної мови програмування, до якої висуваються наступні вимоги:
Кожна програма починається зі слова begin і закінчується словом end. Все що до begin і після end не аналізується. Наприклад як у мові Паскаль begin end.
Програма має надавати можливість працювати зі змінними таких типів:
Integer – цілі числа;
Char – символи;
Real – дійсні числа;
String – рядки символів.
Змінні перед використанням мають бути попередньо оголошені за наступним форматом: “тип даних” “змінна”; Наприклад integer x;
Присвоєння до змінних виконується оператором присвоєння >> Наприклад x >> y + 5;
Над змінними виконуються наступні операції.
Арифметичні:
+,-,*,/ додавання, віднімання, множення, ділення;
^ піднесення до степеня;
% обчислення залишку;
Логічні:
==,!= рівність, нерівність;
>,<,>=,<= більше, менше, більше-рівне, менше-рівне;
!,&,| логічні операції NOT, AND, OR.
Ввід даних зі стандартного вводу відбувається оператором read, а вивід оператором write. Наприклад read x; write y.
Для виконання умовних дій використовується оператор if-then. Наприклад if ( a > b ) then a >> b;
Програмування циклів забезпечується оператором for-to-do. Наприклад for ( i >> 1 to 5) < оператори > do.
Цільова мова компілятора ANSI C. Мова розробки компілятора: ANSI C.
Потрібно також розробити інтегроване середовище, яке б включало текстовий редактор з можливістю набору, редагування програми; зчитування та запису її з/на диск, запуску трансляції.
На вхід розробленого компілятора має подаватися текстовий файл, написаний на заданій мові програмування. На виході розробленого компілятора мають з’являтися три файли:
файл з результатом лексичного аналізу,
файл з результатом синтаксичного аналізу,
файл з результуючим файлом на мові С.
Для захисту курсового проекту потрібно мати:
пояснювальну записку,
файл з вихідним текстом компілятора на мові ANSI C або C++,
виконавчий файл компілятора,
набір тестових програм та вхідній мові програмування.
Формальний опис вхідної мови програмування
Одною з перших задач, що виникають при побудові компілятора, є визначення вхідної мови програмування. Для цього використовують різні способи формального опису, серед яких я використаю розширену нотацію Бекуса-Наура (Backus/Naur Form - BNF).
Деталізований опис вхідної мови
Типи даних integer, char, real, string;
Арифметичні операції над числами +, -, *, /, ^, %;
Логічні операції ==,!=,>,<,>=,<=,!,&,|;
Оператор присвоєння значень змінним >> ;
Круглі дужки ( );
Оператори вводу-виводу read, write;...